home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / asm.arc / UTILITES.MAC < prev   
Text File  |  1988-11-20  |  12KB  |  449 lines

  1. OPTS MACRO
  2. .LALL
  3. ;;      OPTIONS MODULE  --- Ken Jones 1983
  4. ;;      THIS MODULE IS USED TO CONTROL THE VARIOUS
  5. ;;      ASSEMBLY TIME OPTIONS AND INITIALIZE
  6. ;;      THE STANDARD EQUATES
  7. ECNT    =       0               ;ERROR COUNTER
  8. VERSN   =       1               ;CURRENT VERSION NUMBER
  9. IBM     =       1               ;SET FOR IBM ASSEMBLIES
  10. .XALL
  11.         ENDM
  12.  
  13. ERRMSG  MACRO   TEXT
  14. ECNT    =       ECNT+1
  15.         EMSG    %ECNT,TEXT
  16.         ENDM
  17.  
  18. EMSG    MACRO   C,T
  19. ERR&C   DB      'E&C '
  20.         DB      T,13,'$'        ;TEXT OF MESSAGE
  21.         ENDM
  22.  
  23. GETLIB  MACRO   PARM
  24.         IF1
  25.         INCLUDE PARM
  26.         ENDIF
  27.         ENDM
  28.  
  29. SPACE   MACRO   LC
  30.         IFB     <LC>
  31. .LALL
  32. ;;
  33. .XALL
  34.         ELSE
  35.         REPT    LC
  36. .LALL
  37. ;;
  38. .XALL
  39.         ENDM
  40.         ENDIF
  41.         ENDM
  42.  
  43. EOJ     MACRO   RC
  44. ;;      TERMINATE PROGRAM MACRO
  45.         SPACE
  46. .LALL
  47. ;       END OF PROGRAM
  48. .XALL
  49.         SPACE
  50.         MOV     AH,04CH ;SET EOJ FUNCTION DOS 2.0
  51.         MOV     AL,RC   ;SET RETURN CODE
  52.         INT     21H             ;CALL DOS
  53.         ENDM
  54.  
  55. OPERWAIT        MACRO   BUFF
  56. ;;      CLEAR BUFFER FOR STDIN AND WAIT FOR A KEY TO BE
  57. ;;      PRESSED
  58.         SPACE
  59. ;       WAIT FOR OPERATOR
  60.         SPACE
  61.         MOV     DX,OFFSET BUFF  ;LOCATE DATA BUFFER
  62.         MOV     AL,0AH          ;READ STDIN
  63.         MOV     AH,0CH          ;REQUEST BUFFER CLEAR
  64.         INT     21H                     ;CALL DOS
  65.         ENDM
  66.  
  67. OPEN    MACRO   FCB
  68. ;;      OPEN FCB MACRO OLD STYLE
  69.         SPACE
  70. ;       OPEN AN FCB
  71.         SPACE
  72.         MOV     DX,OFFSET FCB   ;LOCATE FILE FCB
  73.         MOV     AH,0FH          ;REQUEST OPEN
  74.         INT     21H                     ;CALL DOS
  75.         ENDM
  76.  
  77. CLOSE   MACRO   FCB
  78. ;;      CLOSE AN FCB  OLD STYLE
  79.         SPACE
  80. ;       CLOSE AN FCB
  81.         SPACE
  82.         MOV     DX,OFFSET FCB   ;LOCATE FILE FCB
  83.         MOV     AH,010H         ;REQUEST CLOSE
  84.         INT     21H                     ;CALL DOS
  85.         ENDM
  86.  
  87. ERASE   MACRO   FCB
  88. ;;      MACRO TO ERASE A DISK FILE
  89.         SPACE
  90. ;       ERASE A FILE
  91.         SPACE
  92.         MOV     DX,OFFSET FCB   ;LOCATE FILE NAME
  93.         MOV     AH,013H         ;REQUEST ERASE FUNCTION
  94.         INT     21H                     ;CALL DOS
  95.         ENDM
  96.  
  97. GET     MACRO   FCB
  98. ;;      SEQUENTIAL READ REQUEST
  99.         SPACE
  100. ;       READ SEQUENTIAL
  101.         SPACE
  102.         MOV     DX,OFFSET FCB   ;LOCATE FCB FOR FILE
  103.         MOV     AH,014H         ;REQUEST READ
  104.         INT     21H                     ;CALL DOS
  105.         ENDM
  106.  
  107. PUT     MACRO   FCB
  108. ;;      SEQUENTIAL WRITE
  109.         SPACE
  110. ;       SEQUENTIAL WRITE TO FCB
  111.         SPACE
  112.         MOV     DX,OFFSET FCB   ;LOCATE FILE FCB
  113.         MOV     AH,015H         ;REQUEST WRITE FUNCTION
  114.         INT     21H                     ;CALL DOS
  115.         ENDM
  116.  
  117. CREATE  MACRO   FCB
  118. ;;      OPEN A FILE FOR OUTPUT
  119.         SPACE
  120. ;       OPEN OUTPUT FILE
  121.         SPACE
  122.         MOV     DX,OFFSET FCB   ;LOCATE FILE FCB
  123.         MOV     AH,016H         ;REQUEST CREATE FUNCTION
  124.         INT     21H
  125.         ENDM
  126.  
  127. READ    MACRO   FCB
  128. ;;      RANDOM READ
  129.         SPACE
  130. ;       RANDOM READ
  131.         SPACE
  132.         MOV     DX,OFFSET FCB   ;LOCATE FILE FCB
  133.         MOV     AH,21H          ;REQUEST READ
  134.         INT     21H                     ;CALL DOS
  135.         ENDM
  136.  
  137. WRITE   MACRO   FCB
  138. ;;      RANDOM WRITE REQUEST
  139.         SPACE
  140. ;       RANDOM WRITE OR UPDATE
  141.         SPACE
  142.         MOV     DX,OFFSET FCB   ;LOCATE FCB
  143.         MOV     AH,22H          ;REQUEST WRITE
  144.         INT     21H
  145.         ENDM
  146.  
  147. FILSIZE MACRO   FCB
  148. ;;      GET NUMBER OF RECORDS IN FILE FOR OPEN FCB
  149.         SPACE
  150. ;       DETERMINE NUMBER OF RECORDS
  151.         SPACE
  152.         MOV     DX,OFFSET FCB   ;LOCATE FCB
  153.         MOV     AH,23H          ;REQUEST NO OF RECORDS
  154.         INT     21H                     ;CALL DOS
  155.         ENDM
  156.  
  157. STDOUT  MACRO   TEXT
  158. ;;      WRITE TO STDOUT DEVICE FROM SPECIAL BUFFER
  159.         SPACE
  160. .LALL
  161. ;       PUT TO STDOUT DEVICE
  162. .XALL
  163.         SPACE
  164.         MOV     DX,OFFSET TEXT  ;POINT AT DATA BUFFER
  165.         MOV     AH,09H          ;REQUEST OUTPUT
  166.         INT     21H                     ;CALL DOS
  167.         ENDM
  168.  
  169. STDIN   MACRO   BUFF
  170. ;;      READ STANDARD INPUT DEVICE
  171.         SPACE
  172. .LALL
  173. ;       READ FROM STANDARD INPUT
  174. ;       1ST BYTE IN BUFFER IS SIZE OF BUFFER
  175. ;       2ND BYTE RETURNS NUMBER OF BYTES READ
  176. ;       3RD BYTE IS START OF INPUT DATA
  177. ;       INPUT DATA IS FOLLOWED BY CARRIAGE RETURN X'13'
  178. .XALL
  179.         SPACE
  180.         MOV     DX,OFFSET BUFF          ;LOCATE BUFFER
  181.         MOV     AH,0AH                  ;REQUEST INPUT
  182.         INT     21H                             ;CALL DOS
  183.         ENDM
  184.  
  185. SETRRF  MACRO   FCB
  186. ;;      SET UP RANDOM RECORD FIELD IN FCB
  187.         SPACE
  188. ;       SET RANDOM RECORD FIELD
  189.         SPACE
  190.         MOV     DX,OFFSET FCB           ;LOCATE FCB
  191.         MOV     AH,24H                  ;REQUEST SET FUNCTION
  192.         INT     21H                             ;CALL DOS
  193.         ENDM
  194.  
  195. SETDTA  MACRO   BUFF
  196.         MOV     DX,OFFSET BUFF          ;LOCATE BUFFER
  197.         MOV     AH,1AH                  ;REQUEST SET DTA
  198.         INT     21H                             ;CALL DOS
  199.         ENDM
  200.  
  201. SETINT  MACRO   INO,NEW
  202. ;;      ESTABLISH INTRAPROGRAM INTERRUPT VECTOR
  203. ;;      CAUSES THE NUMBERED INTERRUPT TO VECTOR TO
  204. ;;      THE ADDRESS GIVEN
  205.         SPACE
  206. ;       SET INTERRUPT ADDR
  207.         SPACE
  208.         MOV     DX,OFFSET NEW   ;FIND ADDR OF INT CODE
  209.         MOV     AL,INO          ;FOR WHICH INTERRUPT
  210.         MOV     AH,25H          ;REQUEST SET FUNCTION
  211.         INT     21H                     ;TELL DOS
  212.         ENDM
  213.  
  214. DATE    MACRO
  215.         SPACE
  216. ;       GET DATE IN REGS
  217.         SPACE
  218.         MOV     AH,2AH          ;REQUEST DATE INFO
  219.         INT     21H                     ;CALL DOS
  220.         ENDM
  221.  
  222. TIME    MACRO
  223.         SPACE
  224. ;       GET TIME IN REGS
  225.         SPACE
  226.         MOV     AH,2CH          ;REQUEST TIME
  227.         INT     21H                     ;CALL DOS
  228.         ENDM
  229.  
  230. GETDTA  MACRO
  231.         SPACE
  232. ;       GET CURRENT DISK TRANSFER ADDR
  233.         SPACE
  234.         MOV     AH,2FH          ;REQUEST DTA ADDR
  235.         INT     21H                     ;CALL DOS
  236. .LALL
  237. ;
  238. ;       ES:BX NOW HAS DTA ADDR
  239. ;
  240. .XALL
  241.         ENDM
  242.  
  243. GETINT  MACRO   INO
  244.         SPACE
  245. ;       RESTORE INTERRUPT VECTOR TO NORMAL
  246.         SPACE
  247.         MOV     AH,35H          ;REQUEST RESTORE INT
  248.         MOV     AL,INO          ;GET NUMBER INT
  249.         INT     21H
  250. .LALL
  251. ;
  252. ;       ES:BX CONTAINS NORMAL ADDR
  253. ;
  254. .XALL
  255.         ENDM
  256.  
  257. DSPACE  MACRO   DRIVE
  258.         SPACE
  259. ;       FIND FREE SPACE ON A DRIVE
  260.         SPACE
  261.         MOV     AH,36H          ;REQUEST FREE SPACE
  262.         MOV     DL,DRIVE                ;DEFINE WHICH DRIVE
  263.         INT     21H                     ;CALL DOS
  264. .LALL
  265. ;
  266. ;       BX HAS NUMBER OF CLUSTER AVAILABLE
  267. ;       DX HAS TOTAL CLUSTERS ON THE DRIVE
  268. ;       CX HAS NUMBER OF BYTES PER SECTOR
  269. ;       AX HAS NUMBER OF SECTORS PER CLUSTER
  270. ;
  271. .XALL
  272.         ENDM
  273.  
  274. VERSION MACRO
  275.         SPACE
  276. ;       GET DOS VERSION NUMBER
  277.         SPACE
  278.         MOV     AH,30H          ;REQUEST VERSION
  279.         INT     21H                     ;CALL DOS
  280. .LALL
  281. ;
  282. ;       AL HAS VERSION NUMBER
  283. ;
  284. .XALL
  285.         ENDM
  286.  
  287. STAYRES MACRO   ENDADDR
  288.         SPACE
  289. ;       TERMINATE AND REMAIN RESIDENT
  290.         SPACE
  291.         MOV     DX,OFFSET ENDADDR+1     ;FIND END OF PGM
  292.         INT     27H                     ;TELL DOS
  293.         ENDM
  294.  
  295. EOJOLD  MACRO
  296. ;;      EOJ FOR EARLY VERSIONS OF DOS
  297.         SPACE
  298. ;       END OF JOB
  299.         SPACE
  300.         MOV     AX,0                    ;REQUEST TERMINATE
  301.         INT     21H                     ;BACK TO THE FARM
  302.         ENDM
  303.  
  304. PINIT   MACRO   PGNAME,PCNAME
  305.         NAME    PGNAME
  306.         PAGE    55,132
  307.         SUBTTL  PGNAME STARTING POINT
  308.         TITLE   PGNAME
  309. STACK   SEGMENT PARA STACK
  310.         DW      200 DUP(?)
  311. TOP_STACK       LABEL   FAR
  312. STACK   ENDS
  313. ;
  314. ;
  315. PGNAME  SEGMENT PARA 'MAIN'
  316.         ASSUME  CS:PGNAME,DS:PGNAME,ES:PGNAME,SS:STACK
  317.         ORG     0100H
  318. PCNAME  PROC    FAR
  319.         OPTS
  320.         DB      '000000'                ;RESERVE FOR BRANCH
  321. PGMID   DB      'PGNAME'                ;PROGRAM NAME
  322.         ORG     PGMID+8
  323.         DB      %VERSN          ;VERSION LEVEL
  324.         SAVEAREA
  325.         DB      'Your copy write here ..1984 ',10,13,'$'
  326.         ENDM
  327.  
  328. SAVEAREA        MACRO
  329. DSAVE   DW      ?                       ;SAVE DS REG
  330. ESAVE   DW      ?                       ;SAVE ES REG
  331. SSAVE   DW      ?                       ;SAVE SS REG
  332. DISAVE  DW      ?                       ;SAVE DI REG
  333. SISAVE  DW      ?                       ;SAVE SI REG
  334. BPSAVE  DW      ?                       ;SAVE BP REG
  335. SPSAVE  DW      ?                       ;SAVE SP REG
  336. AXSAVE  DW      ?                       ;SAVE AX REG
  337. BXSAVE  DW      ?                       ;SAVE BX REG
  338. CXSAVE  DW      ?                       ;SAVE CX REG
  339. DXSAVE  DW      ?                       ;SAVE DX REG
  340.         ENDM
  341.  
  342. SOJ     MACRO   STRT
  343. STRT    LABEL   FAR
  344.         ORG     0100H
  345.         JMP     STRT
  346.         ORG     STRT
  347.  
  348.         ENDM
  349.  
  350. SAVE    MACRO
  351.         MOV     DSAVE,DS                ;save all regs
  352.         MOV     ESAVE,ES
  353.         MOV     SSAVE,SS
  354.         MOV     DISAVE,DI
  355.         MOV     SISAVE,SI
  356.         MOV     BPSAVE,BP
  357.         MOV     SPSAVE,SP
  358.         MOV     AXSAVE,AX
  359.         MOV     BXSAVE,BX
  360.         MOV     CXSAVE,CX
  361.         MOV     DXSAVE,DX
  362.         ENDM
  363.  
  364. RELOAD  MACRO
  365.         MOV     DS,DSAVE                ;RESTORE ALL REGS
  366.         MOV     ES,ESAVE
  367.         MOV     SS,SSAVE
  368.         MOV     DI,DISAVE
  369.         MOV     SI,SISAVE
  370.         MOV     BP,BPSAVE
  371.         MOV     SP,SPSAVE
  372.         MOV     AX,AXSAVE
  373.         MOV     BX,BXSAVE
  374.         MOV     CX,CXSAVE
  375.         MOV     DX,DXSAVE
  376.         ENDM
  377.  
  378. ENDALL  MACRO   PGNAME,PCNAME
  379. ENDPGM  LABEL   FAR
  380. PCNAME  ENDP
  381. PGNAME  ENDS
  382.         ENDM
  383.  
  384. FILL    MACRO   FLD,DATA,LNG
  385. ;;      FILL A FIELD WITH THE BYTE SPECIFIED FOR THE
  386. ;;      GIVEN LENGTH
  387.         MOV     AL,DATA         ;GET THE FILL CHARACTER
  388.         MOV     DI,OFFSET FLD   ;LOCATE DESTINATION
  389.         MOV     CX,LNG          ;SET LENGTH OF FILL
  390.         REP  STOSB                      ;FILL IT
  391.         ENDM
  392.  
  393. SCANBYTE        MACRO   FLD,DATA,LNG,FND
  394.         LOCAL   AGAIN
  395. ;;      SCANS THE STRING 'FLD' FOR THE BYTE 'DATA'
  396. ;;      FOR A LENGTH OF 'LNG'. IF A MATCH IS FOUND
  397. ;;      BRANCH IS TAKEN TO 'FND'
  398.         MOV     DI,OFFSET FLD   ;LOCATE FIELD
  399.         MOV     AL,DATA         ;GET BYTE TO FIND
  400.         MOV     CX,LNG          ;SET LENGTH
  401. AGAIN   SCASB
  402.         JZ      FND                     ;BRANCH IF FOUND
  403.         LOOP    AGAIN           ;KEEP GOING
  404.         ENDM
  405.  
  406. COPY    MACRO   FROM,TO,LNG
  407. ;;      COPY FROM ADDR TO TO ADDR FOR LNG
  408.         MOV     SI,OFFSET FROM  ;GET SENDING FIELD
  409.         MOV     DI,OFFSET TO    ;GET DESTINATION
  410.         MOV     CX,LNG          ;SET LENGTH
  411.         REP  MOVSB                      ;COPY THE DATA
  412.         ENDM
  413.  
  414. DSPLY   MACRO   MSG
  415.         MOV     DX,OFFSET MSG
  416.         MOV     AH,09H          ;SET DISPLAY REQUEST
  417.         INT     21H                     ;CALL DOS
  418.         ENDM
  419.  
  420. REPLY   MACRO   BUF
  421.         PUSH    DS
  422.         MOV     DX,OFFSET BUF   ;SET POINTER
  423.         MOV     AH,0AH          ;SET REQUEST
  424.         INT     21H                     ;CALL DOS
  425.         POP     DS
  426.         ENDM
  427.  
  428. SCROLL  MACRO
  429.         MOV     AX,600H         ;SCROLL WHOLE WINDOW
  430.         INT     10H                     ;CALL BIOS
  431.         ENDM
  432.  
  433. LOCATE  MACRO
  434.         MOV     AH,2                    ;SELECT LOCATE
  435.         INT     10H
  436.         ENDM
  437.  
  438. KEYBOARD        MACRO
  439.         MOV     AH,10           ;SELECT READ
  440.         INT     21H                     ;CALL DOS
  441.         ENDM
  442.  
  443. BLANK   MACRO
  444.         MOV     CX,0                    ;UPPER LEFT 0,0
  445.         MOV     DX,2479H                ;LOWER RIGHT
  446.         MOV     BH,7                    ;NORMAL ATTRIBUTE
  447.         SCROLL
  448.         ENDM
  449.